/**
 * 
 */
package br.com.skynix.tcmc.model.venda;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.annotations.ForeignKey;

import br.com.skynix.tcmc.base.model.EntidadeAuditavel;
import br.com.skynix.tcmc.model.servico.Aparelho;
import br.com.skynix.tcmc.model.servico.Plano;
import br.com.skynix.tcmc.model.servico.Servico;
import br.com.skynix.tcmc.model.servico.TipoPlano;

/**
 * @author davi
 * 
 */
@Entity
@Table(name = "tb_item_pedido")
public class ItemPedido extends EntidadeAuditavel {
	@NotNull
	@ManyToOne
	@JoinColumn(name = "id_pedido_fk", nullable = false,
			referencedColumnName = "id")
	@ForeignKey(name = "FK001_item_pedido")
	private Pedido pedido;

	@NotNull
	@ManyToOne
	@JoinColumn(name = "id_tipo_venda_fk", nullable = false,
			referencedColumnName = "id")
	@ForeignKey(name = "FK002_item_pedido")
	private TipoVenda tipoVenda;

	@ManyToOne
	@JoinColumn(name = "id_tipo_plano_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK003_item_pedido")
	private TipoPlano tipoPlano;

	@ManyToOne
	@JoinColumn(name = "id_plano_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK004_item_pedido")
	private Plano plano;

	@ManyToOne
	@JoinColumn(name = "id_servico_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK005_item_pedido")
	private Servico servico;

	@ManyToOne
	@JoinColumn(name = "id_aparelho_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK006_item_pedido")
	private Aparelho aparelho;

	@Column(name = "qtd_acessos", nullable = true)
	private Integer quantidadeAcessos;

	@Size(max = 2)
	@Column(name = "area_registro", nullable = true, length = 2,
			columnDefinition = "CHAR(2) DEFAULT NULL")
	private String areaRegistro;

	@Column(name = "flag_portabilidade", nullable = false,
			columnDefinition = "BOOLEAN DEFAULT FALSE")
	private Boolean flagPortabilidade;

	@Column(name = "qtd_portabilidade", nullable = true)
	private Integer quantidadePortabilidade;

	/**
	 * @return the pedido
	 */
	public Pedido getPedido() {
		return pedido;
	}

	/**
	 * @param pedido the pedido to set
	 */
	public void setPedido(Pedido pedido) {
		this.pedido = pedido;
	}

	/**
	 * @return the tipoVenda
	 */
	public TipoVenda getTipoVenda() {
		return tipoVenda;
	}

	/**
	 * @param tipoVenda the tipoVenda to set
	 */
	public void setTipoVenda(TipoVenda tipoVenda) {
		this.tipoVenda = tipoVenda;
	}

	/**
	 * @return the tipoPlano
	 */
	public TipoPlano getTipoPlano() {
		return tipoPlano;
	}

	/**
	 * @param tipoPlano the tipoPlano to set
	 */
	public void setTipoPlano(TipoPlano tipoPlano) {
		this.tipoPlano = tipoPlano;
	}

	/**
	 * @return the plano
	 */
	public Plano getPlano() {
		return plano;
	}

	/**
	 * @param plano the plano to set
	 */
	public void setPlano(Plano plano) {
		this.plano = plano;
	}

	/**
	 * @return the servico
	 */
	public Servico getServico() {
		return servico;
	}

	/**
	 * @param servico the servico to set
	 */
	public void setServico(Servico servico) {
		this.servico = servico;
	}

	/**
	 * @return the aparelho
	 */
	public Aparelho getAparelho() {
		return aparelho;
	}

	/**
	 * @param aparelho the aparelho to set
	 */
	public void setAparelho(Aparelho aparelho) {
		this.aparelho = aparelho;
	}

	/**
	 * @return the quantidadeAcessos
	 */
	public Integer getQuantidadeAcessos() {
		return quantidadeAcessos;
	}

	/**
	 * @param quantidadeAcessos the quantidadeAcessos to set
	 */
	public void setQuantidadeAcessos(Integer quantidadeAcessos) {
		this.quantidadeAcessos = quantidadeAcessos;
	}

	/**
	 * @return the areaRegistro
	 */
	public String getAreaRegistro() {
		return areaRegistro;
	}

	/**
	 * @param areaRegistro the areaRegistro to set
	 */
	public void setAreaRegistro(String areaRegistro) {
		this.areaRegistro = areaRegistro;
	}

	/**
	 * @return the flagPortabilidade
	 */
	public Boolean getFlagPortabilidade() {
		return flagPortabilidade;
	}

	/**
	 * @param flagPortabilidade the flagPortabilidade to set
	 */
	public void setFlagPortabilidade(Boolean flagPortabilidade) {
		this.flagPortabilidade = flagPortabilidade;
	}

	/**
	 * @return the quantidadePortabilidade
	 */
	public Integer getQuantidadePortabilidade() {
		return quantidadePortabilidade;
	}

	/**
	 * @param quantidadePortabilidade the quantidadePortabilidade to set
	 */
	public void setQuantidadePortabilidade(Integer quantidadePortabilidade) {
		this.quantidadePortabilidade = quantidadePortabilidade;
	}
}
